#第5章 字典
#字典的创建
print("--------------字典的创建----------------")
dict1 = {'小智':1001,'小明':1002,'小强':1003}
print(dict1)
print(dict1['小智'])

#通过dict()函数创建字典
print("--------------通过dict()函数创建字典----------------")
student = [('小智','1001'),('小明','1002'),('小强','1003')]
detail = dict(student)
print(detail)

print("--------------通过关键字创建字典----------------")
detail2 = dict(name='小智',number=1002)
print(detail2)

#字典的基本操作
print("--------------修改、新增元素----------------")
student = {'小智':1001,'小明':1002,'小强':1003}
student['小强'] = 'hello'
print(student)
student['小张'] = 1004
print(student)

print("--------------删除元素----------------")
del student['小智'] #删除字典中的元素
print(student)
del student #删除整个字典
#print(student)

print("--------------字典的特性1----------------")
student = {'小智':1001,'小明':1002,'小强':1003,'小智':1005}
print(student)

print("--------------字典的特性2----------------")
#student = {['小智']:1001} #键必须是不可变的，不可以是列表
student = {('小智'):1001} #键必须是不可变的，可以是元组
print(student)

print("--------------len()函数----------------")
student = {'小智':1001,'小明':1002,'小强':1003,'小智':1005}
print("student字典的长度是%d" % len(student))

print("--------------type()函数----------------")
student = {'小智':1001,'小明':1002,'小强':1003,'小智':1005}
print("student字典的类型是%s" % type(student))

print("--------------字典的格式化----------------")
student = {'小智':1001,'小明':1002,'小强':1003,'小智':1005}
print("student字典中小明的学号是%(小明)s" % student)

print("--------------clear()方法----------------")
student = {'小智':1001,'小明':1002,'小强':1003,'小智':1005}
student.clear()
print("student字典中元素的个数是：%d" % len(student))

print("--------------clear()方法-一个有趣的示例----------------")
student = {'小智':1001,'小明':1002,'小强':1003,'小智':1005}
studentCopy = student
student.clear()#当使用clear()方法时，studentCopy的值也被清空了
print(student)
print(studentCopy)

print("--------------copy()方法----------------")
student = {'小智':1001,'小明':1002,'小强':1003}
studentCopy = student.copy()
print("student字典copy的结果是：",studentCopy)

studentCopy['小强']=2018
print("更新copy后的值：更新后的studentCopy是：",studentCopy)
print("更新copy后的值：student是：",student)

del studentCopy['小强']
print("删除copy后的值：更新后的studentCopy是：",studentCopy)
print("删除copy后的值：student是：",student)

student['小明'] = 3333
print("更新原始值：更新后的studentCopy是：",studentCopy)
print("更新原始值：student是：",student)

del student['小强']
print("删除原始值：更新后的studentCopy是：",studentCopy)
print("删除原始值：student是：",student)

print("--------------fromkeys()方法----------------")
seq = ('name','age','sex')
print(dict.fromkeys(seq))
print(dict.fromkeys(seq,10))

print("--------------get()方法----------------")
student = {'小智':1001,'小明':1002,'小强':1003}
print("student中小智的学号是：%s" % student.get('小智'))
print("student中小智的学号是：%s" % student['小智'])#使用字典下标取值
print("student中小张的学号是：%s" % student.get('小张','没有这个人'))#get()方法取值不存在时，不会报错
#print("student中小张的学号是：%s" % student['小张'])#使用字典下标取值不存在时，会报错。

print("--------------key in dict方法----------------")
student = {'小智':1001,'小明':1002,'小强':1003}
print("小智在字典中：%s" % ('小智' in student))#注意要用括号括起来，否则输出为false

print("--------------items()方法----------------")
student = {'小智':1001,'小明':1002,'小强':1003}
print(student.items())

print("--------------keys()方法----------------")
student = {'小智':1001,'小明':1002,'小强':1003}
print(student.keys())

print("--------------setdefault()方法----------------")
student = {'小智':1001,'小明':1002,'小强':1003}
print("student中小智的学号是：%s" % student.setdefault('小智'))
print("student中小智的学号是：%s" % student.setdefault('小智',2001))#key存在的话，返回key的值，不改变key对应的值
#print("student中小张的学号是：%s" % student.setdefault('小张')) #如果不指定值，则默认值为None
print("student中小张的学号是：%s" % student.setdefault('小张',1004)) #key不存在，存在指定值，则value=指定值
print("student中小张的学号是：%s" % student['小张'])

print("--------------update()方法----------------")
student = {'小智':1001,'小明':1002,'小强':1003}
studentb = {'小张':1004,'小李':1005}
student.update(studentb)
studentc = {'小张':2001,'小李':2002}#相同的项会覆盖
student.update(studentc)
print(student)

print("--------------values()方法----------------")
student = {'小智':1001,'小明':1002,'小强':1003}
print("student中的元素是：%s" % student.values())
print("student中的元素是：%s" % list(student.values()))

print("--------------习题----------------")
#用dict函数实现存储一个人的姓名、手机号和地址信息
person = [('姓名','张三'),('手机号','13388886666'),('地址','火星')]
print(dict(person))
#创建一个字典，里面元素的键/值全部由字符串组成，然后更改某个元素，更改其
#值为非字符串形式
student = {'小智':'1001','小明':'1002','小强':'1003'}
# student['小智'] = 2018
student['小智'] = ['2018','世界杯']
print(student)